当前位置:  开发笔记 > 编程语言 > 正文

带有`$ q`的角度执行顺序 - 链接承诺

如何解决《带有`$q`的角度执行顺序-链接承诺》经验,为你挑选了1个好方法。

以下方法工作:

$q.when()
        .then(checkCookieToken)         // check if cookie already exists e.g. in cookie
        .then(setHeader)                // set Header with REST-Token e.g from cookie
        .then(checkTokenOnline)         // if not OK logout
        .then(getMenu)                  // if previous OK get navigation menu
        .then(getDataResource)          // set ngResource
        .then(getData);                 // and query it

4个问题:

1)如果eg checkTokenOnline不正常,我不想执行其余的功能,我怎么能退出(退出,中断,等等......)?

2)如何设置其中一些并行,其中一些是串行的?

3)如何在它们之间传输数据?

4)如何使以下功能取决于之前的结果?



1> georgeawg..:

你问的是如何在promises中链接函数.

3)如何在它们之间传输数据?

4)如何根据以前的结果制作以下功能?

返回链中下一个函数的数据(或承诺):

var p2 = p1.then ( function (data) {
     var nextData = someFn(data);
     return nextData;
});

var p3 = p2.then ( function (nextData) {
     var nextData2 = someOtherFn(nextData);
     return nextData2;
});

//return for further chaining
return p3;

1)如果例如checkTokenOnline不正常,我不想执行其余的函数,我怎么能退出(退出,中断,等等......)?

拒绝承诺,请让您的函数抛出错误.在.then您提供错误处理程序之前,链将跳过所有方法.

var p2 = p1.then ( function checkTokenOnline (response) {
             if ( isBadFn(response) {
                 throw error;
             } else {
                 return nextData;
             }
   }) .then ( someFn 
    ) .then ( someOtherFn
    ) .catch ( function (error) {
          // someFn and someOtherFn skipped
          //log error
          throw error;
   });

 //return for further chaining
 return p2;

2)如何设置其中一些并行,其中一些是串行的?

要使两个函数并行运行,请做两个承诺.使用$q.all等待他们俩来完成.

var p1 = $q.when ( fn1() );
var p2 = $q.when ( fn2() );

var p3 = $q.all ( [p1, p2] );

var p4 = p3.then ( function (responseList) {
      var response1 = responseList[0];
      var response2 = responseList[1];
      return something;
}). catch ( function (error) {
      //log error
      throw error;
});

//return for further chaining
return p4;

请注意,这$q.all不具备弹性.如果任何promise会抛出错误,.then则将跳过该方法,并且只有第一个错误将转到该.catch方法.

函数式编程的经验法则总是返回一些东西.


有用的链接

AngularJS $ q参考 - 链接承诺

你错过了承诺点.

Ninja Squad - 关于AngularJS承诺的陷阱,反模式和提示

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有